"""
卡片组件 - 现代化的卡片容器
"""

class 卡片:
    """现代化卡片组件"""

    def __init__(self, 标题=None, 样式="card", 主题="light"):
        self.标题 = 标题
        self.样式 = 样式
        self.主题 = 主题
        self._框架 = None
        self._布局 = None
        self._样式规则 = None
        self._控件列表 = []  # 存储待添加的控件

    def _创建实际框架(self):
        """实际创建Qt框架对象"""
        if self._框架 is None:
            from PySide6.QtWidgets import QFrame, QVBoxLayout, QLabel
            from 方圆.核心 import _安全创建控件
            
            self._框架 = _安全创建控件(QFrame)
            self._布局 = QVBoxLayout(self._框架)
            self._布局.setContentsMargins(20, 20, 20, 20)
            self._布局.setSpacing(12)

            if self.标题:
                标题标签 = QLabel(self.标题)
                标题标签.setStyleSheet("font-size: 18px; font-weight: bold;")
                self._布局.addWidget(标题标签)

            # 添加之前存储的控件
            for 控件 in self._控件列表:
                self._布局.addWidget(控件)

            if self._样式规则:
                self._应用样式(self._样式规则)

    def 应用样式(self, 样式规则):
        """应用样式到卡片"""
        self._样式规则 = 样式规则
        if self._框架:
            self._应用样式(样式规则)
        
    def _应用样式(self, 样式规则):
        """内部样式应用方法"""
        样式字符串 = ""
        for 键, 值 in 样式规则.items():
            if 键 == "阴影":
                continue
            样式字符串 += f"{键.replace('_', '-')}: {值};"

        self._框架.setStyleSheet(样式字符串)

        if "阴影" in 样式规则:
            from PySide6.QtWidgets import QGraphicsDropShadowEffect
            from PySide6.QtGui import QColor
            阴影 = QGraphicsDropShadowEffect()
            阴影.setBlurRadius(15)
            阴影.setXOffset(0)
            阴影.setYOffset(4)
            阴影.setColor(QColor(0, 0, 0, 30))
            self._框架.setGraphicsEffect(阴影)

    def 添加控件(self, 控件):
        """添加控件到卡片"""
        if self._框架:
            self._布局.addWidget(控件)
        else:
            self._控件列表.append(控件)

    def 添加间距(self, 大小=10):
        """添加间距"""
        self._创建实际框架()
        self._布局.addSpacing(大小)

    def 添加弹性空间(self):
        """添加弹性空间"""
        self._创建实际框架()
        self._布局.addStretch()

    # 获取实际的Qt框架对象（用于添加到布局）
    def 获取Qt对象(self):
        """获取底层的Qt框架对象"""
        self._创建实际框架()
        return self._框架

    # 简化使用：直接当作QFrame使用
    def __getattr__(self, name):
        self._创建实际框架()
        return getattr(self._框架, name)


def 创建卡片(标题=None, 主题="light"):
    """快速创建卡片"""
    卡片实例 = 卡片(标题, "card", 主题)
    
    # 尝试应用样式（但不强制创建框架）
    try:
        from 方圆.样式.主题 import 获取样式
        样式规则 = 获取样式("card", 主题)
        卡片实例.应用样式(样式规则)
    except ImportError:
        pass  # 样式模块不可用也没关系
    
    return 卡片实例